October 13, 2020
참고도서: 컴퓨터 네트워킹 : 하향식 접근. 7판. James F. Kurose , Keith W.Ross 지음
목적지에서는 이 비트를 확인하고 한 비트라도 다른 비트가 있다면 각 비트가 가진 더 많은 값을 선택해서 받는다.
ACK 패킷을 송신자에게 다시 보내고 송신자는 ACK 패킷을 받을 때까지 기다렸다가 다음 패킷을 보내는 방식이다.이 방법을 사용하면 Flow Control 이 자동으로 된다는 장점이 있다. 왜냐하면 ACK 패킷을 받을 떄까지는 송신자는 절대 다음 패킷을 보내지 않기 때문에 송신자의 전송률이 수진자의 처리율보다 더 빨라도 부하가 걸리는 일이 없기 때문이다.
따라서 Stop-and-wait에서는 Time out 개념을 도입해서 일정시간동안 송신자가 수신자로부터 ACK을 받지 못하면 Time out 이후에 같은 패킷을 다시 한 번 보내는(Retransmission) 구조를 사용한다.
sequence number를 붙여서 수진자 측에서 해당 번호를 확인한 뒤 중복된 패킷은 버리고 해당 패킷에 대한 ACK 만 응답하도록 한다.그런데 만약 각 패킷을 보내는데 걸리는 시간이 다르다면, 다음과 같은 시나리오가 발생한다.
stop-and-wait 의 성능평가는 다음처럼 이루어진다.
2tpL+A / R(L+A)/R + 2tp 이다.L/(L+A+2Rtp) 로 계산된다.Sliding window 는 파이프라이닝을 사용해서 아직 ACK이 송신측에 도착하지 않았다고 하더라고 일정한 양의 패킷을 연달아 보내는 정책이다.

송신측 동작 원리
send_base는 아직 ACK 응답을 받지 않은 패킷들 중에 가장 첫 패킷을 말한다. 따라서 송신측은 sendbase 부터 sendbase + N - 1 번 까지의 패킷 중 아직 보내지 않은 패킷을 보내게 된다.time out 서비스를 제공한다.수신측 동작 원리
window를 항상 1로 설정한다. 따라서 수신측은 현재 받고자 하는 패킷의 sequence number 만을 기억한다.cumulative ACK 이라고 하고, 해당 ACK이 가진 sequence number 이전의 숫자를 가진 모든 패킷들은 정상적으로 도착했다는 것을 의미한다.버린다. 그리고 지금 가지고 있는 연속된 sequence number 중 가장 큰 숫자를 ACK에 붙여 보낸다. 이렇게 하면 현 시점에서 성공적으로 받은 마지막 패킷의 숫자를 송신자에게 알려주게 된다.윈도우의 크기는 sequence number 로 사용하는 비트 수에 영향을 받는다. 윈도우가 너무 크면 일정 비트의 sequence number로 표현할 수 없는 문제가 발생한다.
2^m - 1보다 같거나 작아야한다.송신측 동작원리
send_base ~ send_base + N - 1 의 sequence number를 가진 패킷을 전달한다.수신측 동작원리
SR도 GBN 과 같이 윈도우 크기와 sequence number 의 비트수가 서로 연관되어 있다.
2^m - 1보다 같거나 작아야한다.